/*
 * File:   TagWidget.cpp
 * Author: Morpheus
 *
 * Created on 20 juin 2013, 18:09
 */


#include "TagWidget.h"
#include "flowlayout.h"
#include <QtWidgets/qpushbutton.h>
#include <QtCore/qvariant.h>

TagWidget::TagWidget(QWidget* parent)
 : QWidget(parent) {
    QPushButton* p = NULL;
    
    FlowLayout* l = new FlowLayout(this);
    p = new QPushButton(this);
    l->addWidget(p);
    p->setText(tr("cdUP"));
    p->setToolTip(tr("Chemin parent"));
    p->setProperty("tag", "<cdUP(...)>");
    p->setWhatsThis(trUtf8("<html> <head/> <body> <table> <tr> <td>Fonction : </td> <td>cdUP</td> </tr> <tr> <td>Paramètre : </td> <td>Chaîne de caractère représentant un chemin</td> </tr> <tr> <td>Retour : </td> <td>Chaîne de caractère représentant le chemin parent</td> </tr> <tr> <td> </td> <td>ex : <span style=' font-weight:600; text-decoration: underline; color:#ff0000;'>C:/</span>Dossier/Fichier.rtf </td> </tr> </table> </body></html>"));
    connect(p, SIGNAL(clicked()), this, SLOT(pushClicked()));
    
    p = new QPushButton(this);
    l->addWidget(p);
    p->setText(tr("dirName"));
    p->setToolTip(tr("Nom du Dossier"));
    p->setProperty("tag", "<dirName(...)>");
    p->setWhatsThis(trUtf8("<html><head/><body><table><tr><td>Fonction : </td><td>dirName</td></tr><tr><td>Paramètre : </td><td>Chaîne de caractère représentant un chemin</td></tr><tr><td>Retour : </td><td>Chaîne de caractère représentant le nom du dossier</td></tr><tr><td></td><td>ex : <span style=' font-weight:600; text-decoration: underline; color:#ff0000;'>C:/Dossier/</span>Fichier.rtf</td></tr></table></body></html>"));
    connect(p, SIGNAL(clicked()), this, SLOT(pushClicked()));
    
    p = new QPushButton(this);
    l->addWidget(p);
    p->setText(tr("fileBaseName"));
    p->setToolTip(tr("Nom du n ième fichier"));
    p->setProperty("tag", "<fileBaseName(1)>");
    p->setWhatsThis(trUtf8("<html><head/><body><table><tr><td>Fonction : </td><td>fileBaseName</td></tr><tr><td>Paramètre : </td><td>Nombre répresentant l'index d'un fichier dans la list</td></tr><tr><td>Retour : </td><td>Chaîne de caractère représentant le nom du fichier</td></tr><tr><td></td><td>ex: C:/Dossier/<span style=' font-weight:600; text-decoration: underline; color:#ff0000;'>Fichier</span>.rtf</td></tr></table></body></html>"));
    connect(p, SIGNAL(clicked()), this, SLOT(pushClicked()));
    
    p = new QPushButton(this);
    l->addWidget(p);
    p->setText(tr("fileCompletPath"));
    p->setToolTip(tr("Chemin complet du n ième fichier"));
    p->setProperty("tag", "<fileCompletPath(1)>");
    p->setWhatsThis(trUtf8("<html><head/><body><table><tr><td>Fonction : </td><td>fileCompletPath</td></tr><tr><td>Paramètre : </td><td>Nombre répresentant l'index d'un fichier dans la list</td></tr><tr><td>Retour : </td><td>Chaîne de caractère représentant le chemin complet du fichier</td></tr></table></body></html>"));
    connect(p, SIGNAL(clicked()), this, SLOT(pushClicked()));
    
    p = new QPushButton(this);
    l->addWidget(p);
    p->setText(tr("fileCreated"));
    p->setToolTip(tr("Date de création du n ième fichier"));
    p->setProperty("tag", "<fileCreated(1;Text)>");
    p->setWhatsThis(trUtf8("<html><head/><body><table><tr><td>Fonction : </td><td>fileCreated</td></tr><tr><td>Paramètre #1 : </td><td>Nombre répresentant l'index d'un fichier dans la list</td></tr><tr><td>Paramètre #2 : </td><td>Option d'affichage de la date (Text, ISO, Personalisé)</td></tr><tr><td>Retour : </td><td>Chaîne de caractère représentant la date de création du fichier</td></tr><tr><td></td><td>ex1 : fileCreated(1;Text) --&gt; lun.19 mars. 09:27:694 2011</td></tr><tr><td></td><td>ex2 : fileCreated(1;ISO) --&gt; 19/03/2011T09:27:694</td></tr><tr><td></td><td>ex3 : fileCreated(1;dd MMMM yyyy - HH:mm) --&gt; 19 Mars 2011 - 09:27</td></tr></table><p>Formaté vous même la date à l'aide des tag suivant : </p><table border='1' style=' margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px;' cellspacing='2' cellpadding='0'><tr><td>Expression</td><td>Sortie</td></tr><tr><td>d</td><td>Le jour est un nombre qui ne commence pas par zéro</td></tr><tr><td>dd</td><td>Le jour est un nombre qui commence par zéro</td></tr><tr><td>ddd</td><td>L'abréviation du nom local du jour (ex. : ‹Lun› à ‹Dim›).</td></tr><tr><td>dddd</td><td>Le nom local du jour (ex. : ‹Lundi› à ‹Dimanche›).</td></tr><tr><td>M</td><td>Le mois est un nombre qui ne commence pas par zéro (1 à 12).</td></tr><tr><td>MM</td><td>Le mois est un nombre qui commence par zéro (01 à 12).</td></tr><tr><td>MMM</td><td>L'abréviation du nom local du mois (ex. : ‹Jan› à ‹Dec›</td></tr><tr><td>MMMM</td><td>Le nom local du mois (e.g. ‹Janvier› à ‹Décembre›)</td></tr><tr><td>yy</td><td>L'année sur deux chiffres (00 à 99).</td></tr><tr><td>yyyy</td><td>L'année sur quatre chiffres. Si l'année est négative, le signe moins est ajouté au début.</td></tr><tr><td>h</td><td>L' heure est un nombre qui ne commence pas par zéro (0 à 23 ou 1 à 12 si AM/PM</td></tr><tr><td>hh</td><td>L' heure est un nombre qui commence par zéro (00 à 23 ou 01 à 12 si AM/PM</td></tr><tr><td>H</td><td>L' heure est un nombre qui ne commence pas par zéro (0 à 23 même si AM/PM</td></tr><tr><td>HH</td><td>L' heure est un nombre qui commence par zéro (00 à 23 même si AM/PM</td></tr><tr><td>m</td><td>Les minutes est un nombre qui ne commence pas par zéro (0 à 59</td></tr><tr><td>mm</td><td>Les minutes est un nombre qui commence par zéro (00 à 59</td></tr><tr><td>s</td><td>Les secondes est un nombre qui ne commence pas par zéro (0 à 59</td></tr><tr><td>ss</td><td>Les secondes est un nombre qui commence par zéro (00 à 59</td></tr><tr><td>z</td><td>Les secondes est un nombre qui ne commence pas par zéro (0 à 999</td></tr><tr><td>zzz</td><td>Les secondes est un nombre qui commence par zéro (000 à 999</td></tr><tr><td>A</td><td>Utilise l'affichage AM/PM. A sera remplacé par AM ou PM</td></tr></table></body></html>"));
    connect(p, SIGNAL(clicked()), this, SLOT(pushClicked()));
    
    p = new QPushButton(this);
    l->addWidget(p);
    p->setText(tr("fileModified"));
    p->setToolTip(tr("Date de modification du n ième fichier"));
    p->setProperty("tag", "<fileModified(1;Text)>");
    p->setWhatsThis(trUtf8("<html><head/><body><table><tr><td>Fonction : </td><td>fileModified</td></tr><tr><td>Paramètre #1 : </td><td>Nombre répresentant l'index d'un fichier dans la list</td></tr><tr><td>Paramètre #2 : </td><td>Option d'affichage de la date (Text, ISO, Personalisé)</td></tr><tr><td>Retour : </td><td>Chaîne de caractère représentant la date de la dernière modification du fichier</td></tr><tr><td></td><td>ex1 : fileModified(1;Text) --&gt; lun.19 mars. 09:27:694 2011</td></tr><tr><td></td><td>ex2 : fileModified(1;ISO) --&gt; 19/03/2011T09:27:694</td></tr><tr><td></td><td>ex3 : fileModified(1;dd MMMM yyyy - HH:mm) --&gt; 19 Mars 2011 - 09:27</td></tr></table><p>Formaté vous même la date à l'aide des tag suivant : </p><table border='1' style=' margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px;' cellspacing='2' cellpadding='0'><tr><td>Expression</td><td>Sortie</td></tr><tr><td>d</td><td>Le jour est un nombre qui ne commence pas par zéro</td></tr><tr><td>dd</td><td>Le jour est un nombre qui commence par zéro</td></tr><tr><td>ddd</td><td>L'abréviation du nom local du jour (ex. : ‹Lun› à ‹Dim›).</td></tr><tr><td>dddd</td><td>Le nom local du jour (ex. : ‹Lundi› à ‹Dimanche›).</td></tr><tr><td>M</td><td>Le mois est un nombre qui ne commence pas par zéro (1 à 12).</td></tr><tr><td>MM</td><td>Le mois est un nombre qui commence par zéro (01 à 12).</td></tr><tr><td>MMM</td><td>L'abréviation du nom local du mois (ex. : ‹Jan› à ‹Dec›</td></tr><tr><td>MMMM</td><td>Le nom local du mois (e.g. ‹Janvier› à ‹Décembre›)</td></tr><tr><td>yy</td><td>L'année sur deux chiffres (00 à 99).</td></tr><tr><td>yyyy</td><td>L'année sur quatre chiffres. Si l'année est négative, le signe moins est ajouté au début.</td></tr><tr><td>h</td><td>L' heure est un nombre qui ne commence pas par zéro (0 à 23 ou 1 à 12 si AM/PM</td></tr><tr><td>hh</td><td>L' heure est un nombre qui commence par zéro (00 à 23 ou 01 à 12 si AM/PM</td></tr><tr><td>H</td><td>L' heure est un nombre qui ne commence pas par zéro (0 à 23 même si AM/PM</td></tr><tr><td>HH</td><td>L' heure est un nombre qui commence par zéro (00 à 23 même si AM/PM</td></tr><tr><td>m</td><td>Les minutes est un nombre qui ne commence pas par zéro (0 à 59</td></tr><tr><td>mm</td><td>Les minutes est un nombre qui commence par zéro (00 à 59</td></tr><tr><td>s</td><td>Les secondes est un nombre qui ne commence pas par zéro (0 à 59</td></tr><tr><td>ss</td><td>Les secondes est un nombre qui commence par zéro (00 à 59</td></tr><tr><td>z</td><td>Les secondes est un nombre qui ne commence pas par zéro (0 à 999</td></tr><tr><td>zzz</td><td>Les secondes est un nombre qui commence par zéro (000 à 999</td></tr><tr><td>A</td><td>Utilise l'affichage AM/PM. A sera remplacé par AM ou PM</td></tr></table></body></html>"));
    connect(p, SIGNAL(clicked()), this, SLOT(pushClicked()));
    
    p = new QPushButton(this);
    l->addWidget(p);
    p->setText(tr("fileName"));
    p->setToolTip(tr("Nom complet du n ième fichier"));
    p->setProperty("tag", "<fileName(1)>");
    p->setWhatsThis(trUtf8("<html><head/><body><table><tr><td>Fonction : </td><td>fileName</td></tr><tr><td>Paramètre : </td><td>Nombre répresentant l'index d'un fichier dans la list</td></tr><tr><td>Retour : </td><td>Chaîne de caractère représentant le nom complet du fichier</td></tr><tr><td></td><td>ex : C:/Dossier/<span style=' font-weight:600; text-decoration: underline; color:#ff0000;'>Fichier.rtf</span></td></tr></table></body></html>"));
    connect(p, SIGNAL(clicked()), this, SLOT(pushClicked()));
    
    p = new QPushButton(this);
    l->addWidget(p);
    p->setText(tr("filePath"));
    p->setToolTip(tr("Chemin du n ième fichier"));
    p->setProperty("tag", "<filePath(1)>");
    p->setWhatsThis(trUtf8("<html><head/><body><table><tr><td>Fonction : </td><td>filePath</td></tr><tr><td>Paramètre : </td><td>Nombre répresentant l'index d'un fichier dans la list</td></tr><tr><td>Retour : </td><td>Chaîne de caractère représentant le chemin du fichier</td></tr><tr><td></td><td>ex : <span style=' font-weight:600; text-decoration: underline; color:#ff0000;'>C:/Dossier/</span>Fichier.rtf</td></tr></table></body></html>"));
    connect(p, SIGNAL(clicked()), this, SLOT(pushClicked()));
    
    p = new QPushButton(this);
    l->addWidget(p);
    p->setText(tr("fileSuffixe"));
    p->setToolTip(tr("Extension du n ième fichier"));
    p->setProperty("tag", "<fileSuffixe(1)>");
    p->setWhatsThis(trUtf8("<html><head/><body><table><tr><td>Fonction : </td><td>fileSuffixe</td></tr><tr><td>Paramètre : </td><td>Nombre répresentant l'index d'un fichier dans la list</td></tr><tr><td>Retour : </td><td>Chaîne de caractère représentant l'extension du fichier</td></tr><tr><td></td><td>ex : C:/Dossier/Fichier.</span><span style=' font-weight:600; text-decoration: underline; color:#ff0000;'>rtf</span></td></tr></table></p></body></html>"));
    connect(p, SIGNAL(clicked()), this, SLOT(pushClicked()));
    
    p = new QPushButton(this);
    l->addWidget(p);
    p->setText(tr("name"));
    p->setToolTip(tr("Nom du Batch"));
    p->setProperty("tag", "<name()>");
    p->setWhatsThis(trUtf8("<html><head/><body><table><tr><td>Fonction : </td><td>name</td></tr><tr><td>Retour : </td><td>Chaîne de caractère représentant le nom du Batch</td></tr></table></body></html>"));
    connect(p, SIGNAL(clicked()), this, SLOT(pushClicked()));
    
    p = new QPushButton(this);
    l->addWidget(p);
    p->setText(tr("retour"));
    p->setToolTip(tr("Retour à la ligne"));
    p->setProperty("tag", "<endl()>");
    p->setWhatsThis(trUtf8("<html><head/><body><table><tr><td>Fonction : </td><td>endl</td></tr><tr><td>Retour : </td><td>Chaîne de caractère représentant un retour à la ligne</td></tr></table></body></html>"));
    connect(p, SIGNAL(clicked()), this, SLOT(pushClicked()));
    
    p = new QPushButton(this);
    l->addWidget(p);
    p->setText(tr("extrait"));
    p->setToolTip(tr("Extrait d'un chaîne de caractère"));
    p->setProperty("tag", "<mid(...;0;2)>");
    p->setWhatsThis(trUtf8("<html><head/><body><table><tr><td>Fonction : </td><td>mid</td></tr><tr><td>Paramètre #1</td><td>Chaine de Caractère à extraire</td></tr><tr><td>Paramètre #2</td><td>Nombre représentant l'index à partir duquel on veut extraire. l'index 0 étant le début</td></tr><tr><td>Paramètre #3 (optionnel)</td><td>Nombre représentant le nombre de caractère à extraire. S'il n'est pas renseigner cela signifie \"jusqu'à la fin\"</td></tr><tr><td>Retour : </td><td>Chaîne de caractère extraite</td></tr></table></body></html>"));
    connect(p, SIGNAL(clicked()), this, SLOT(pushClicked()));
    
    p = new QPushButton(this);
    l->addWidget(p);
    p->setText(tr("parseDate"));
    p->setToolTip(tr("Change le format d'un date"));
    p->setProperty("tag", "<parseDate(...;dd.MM.yy; ISO)>");
    p->setWhatsThis(trUtf8("<html><head/><body><table><tr><td>Fonction : </td><td>parseDate</td></tr><tr><td>Paramètre #1</td><td>Chaine de Caractère à extraire</td></tr><tr><td>Paramètre #2</td><td>Nombre représentant l'index à partir duquel on veut extraire. l'index 0 étant le début</td></tr><tr><td>Paramètre #3 (optionnel)</td><td>Nombre représentant le nombre de caractère à extraire. S'il n'est pas renseigner cela signifie \"jusqu'à la fin\"</td></tr><tr><td>Retour : </td><td>Chaîne de caractère extraite</td></tr></table></body></html>"));
    connect(p, SIGNAL(clicked()), this, SLOT(pushClicked()));
    
    p = new QPushButton(this);
    l->addWidget(p);
    p->setText(tr("parseDateReg"));
    p->setToolTip(tr("Cherche une date"));
    p->setProperty("tag", "<parseDateReg(...;dd.MM.yy; ISO)>");
    p->setWhatsThis(trUtf8("<html><head/><body><table><tr><td>Fonction : </td><td>parseDateReg</td></tr><tr><td>Paramètre #1</td><td>Chaine de Caractère à extraire</td></tr><tr><td>Paramètre #2</td><td>Nombre représentant l'index à partir duquel on veut extraire. l'index 0 étant le début</td></tr><tr><td>Paramètre #3 (optionnel)</td><td>Nombre représentant le nombre de caractère à extraire. S'il n'est pas renseigner cela signifie \"jusqu'à la fin\"</td></tr><tr><td>Retour : </td><td>Chaîne de caractère extraite</td></tr></table></body></html>"));
    connect(p, SIGNAL(clicked()), this, SLOT(pushClicked()));
    
    p = new QPushButton(this);
    l->addWidget(p);
    p->setText(tr("upper"));
    p->setToolTip(tr("Met en Majuscule"));
    p->setProperty("tag", "<upper(...)>");
    p->setWhatsThis(trUtf8("<html><head/><body><table><tr><td>Fonction : </td><td>upper</td></tr><tr><td>Paramètre #1</td><td>Chaine de Caractère à mettre en majuscule</td></tr><tr><td>Retour : </td><td>Chaîne de caractère en Majuscule</td></tr></table></body></html>"));
    connect(p, SIGNAL(clicked()), this, SLOT(pushClicked()));
    
    p = new QPushButton(this);
    l->addWidget(p);
    p->setText(tr("lower"));
    p->setToolTip(tr("Met en minuscule"));
    p->setProperty("tag", "<lower(...)>");
    p->setWhatsThis(trUtf8("<html><head/><body><table><tr><td>Fonction : </td><td>lower</td></tr><tr><td>Paramètre #1</td><td>Chaine de Caractère à mettre en minuscule</td></tr><tr><td>Retour : </td><td>Chaîne de caractère en minuscule</td></tr></table></body></html>"));
    connect(p, SIGNAL(clicked()), this, SLOT(pushClicked()));
    
    
    setLayout(l);
}

TagWidget::~TagWidget() {
}

void TagWidget::pushClicked(){
    QPushButton* tb = qobject_cast<QPushButton*>(sender());
    if(tb){
        emit formTag( tb->property("tag").toString() );
    }
}
